从对CDN的理解到Nginx负载均衡 | 您所在的位置:网站首页 › cdn 架构 › 从对CDN的理解到Nginx负载均衡 |
什么是CDN
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度**。内容分发网络是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。
中心与边缘节点 CDN 网络一般分为中心与边缘节点两部分,中心负责全局负载均衡与内容管理。中心节点的功能如下: 随时监控边缘节点的健康状况(可用性,拥塞程度);根据边缘节点到请求端的距离,以及边缘节点的健康状况,按一定的策略重定向请求;与客户主站进行数据同步更新。 负责为用户提供内容服务的 cache 设备应部署在物理上的网络边缘位置,即 CDN 边缘层。CDN 系统中负责全局性管理和控制的设备组成中心层(二级缓存),中心层同时保存着最多的内容副本,当边缘层节点未命中时,会向中心层请求,如果在中心层仍未命中,则需要中心层向源站回源进行请求。 使用CDN的好处 加速网站访问,缩短时延 CDN应用广泛,支持多种行业、多种场景内容加速,例如:图片小文件、大文件下载、视音频点播、直播流媒体、全站加速、安全加速。跨运营商,全网覆盖保障网站安全在多台服务器间均衡负载 CDN的工作原理CDN这个技术其实说起来并不复杂,最初的核心理念,就是将内容缓存在终端用户附近。 内容源不是远么?那么,我们就在靠近用户的地方,建一个缓存服务器,把远端的内容,复制一份,放在这里,不就OK了? 具体来说,CDN就是采用更多的缓存服务器(CDN边缘节点),布放在用户访问相对集中的地区或网络中。当用户访问网站时,利用全局负载技术,将用户的访问指向距离最近的缓存服务器上,由缓存服务器响应用户请求。(有点像电商的本地仓吧?) 大家可能觉得,这个不就是“镜像服务器”嘛?其实不一样。镜像服务器是源内容服务器的完整复制。而CDN,是部分内容的缓存,智能程度更高。
从这个例子可以了解到: (1)CDN的加速资源是跟域名绑定的。 (2)通过域名访问资源,首先是通过DNS分查找离用户最近的CDN节点(边缘服务器)的IP (3)通过IP访问实际资源时,如果CDN上并没有缓存资源,则会到源站请求资源,并缓存到CDN节点上,这样,用户下一次访问时,该CDN节点就会有对应资源的缓存了。 什么是负载均衡简言之,负载均衡实际上就是将大量请求进行分布式处理的策略。 什么是 Nginx 负载均衡通过上文简单的概念介绍,你可能对负载均衡有了一个初步的了解,知道它是一种调度策略。那么问题来了,Nginx 又是什么呢?Nginx 如何实现负载均衡?这就要从正向代理和反向代理说起了。 正向代理正向代理(Forward Proxy)最大的特点是,客户端非常明确要访问的服务器地址,它代理客户端,替客户端发出请求。比如:科学上网。 假设客户端想要访问 Google,它明确知道待访问的服务器地址是 https://www.google.com/,但由于条件限制,它找来了一个能够访问到 Google 的”朋友”:代理服务器。客户端把请求发给代理服务器,由代理服务器代替它请求 Google,最终再将响应返回给客户端。这便是一次正向代理的过程,该过程中服务器并不知道真正发出请求的是谁。
Nginx 作为一个基于 C 实现的高性能 Web 服务器,可以通过系列算法解决上述的负载均衡问题。并且由于它具有高并发、高可靠性、高扩展性、开源等特点,成为开发人员常用的反向代理工具 负载均衡常用算法轮询 (round-robin) 轮询为负载均衡中较为基础也较为简单的算法,它不需要配置额外参数。假设配置文件中共有 台服务器,该算法遍历服务器节点列表,并按节点次序每轮选择一台服务器处理请求。当所有节点均被调用过一次后,该算法将从第一个节点开始重新一轮遍历。特点:由于该算法中每个请求按时间顺序逐一分配到不同的服务器处理,因此适用于服务器性能相近的集群情况,其中每个服务器承载相同的负载。但对于服务器性能不同的集群而言,该算法容易引发资源分配不合理等问题。 加权轮询 为了避免普通轮询带来的弊端,加权轮询应运而生。在加权轮询中,每个服务器会有各自的 weight。一般情况下,weight 的值越大意味着该服务器的性能越好,可以承载更多的请求。该算法中,客户端的请求按权值比例分配,当一个请求到达时,优先为其分配权值最大的服务器。特点:加权轮询可以应用于服务器性能不等的集群中,使资源分配更加合理化。 IP 哈希(IP hash) ip_hash 依据发出请求的客户端 IP 的 hash 值来分配服务器,该算法可以保证同 IP 发出的请求映射到同一服务器,或者具有相同 hash 值的不同 IP 映射到同一服务器。特点:该算法在一定程度上解决了集群部署环境下 Session 不共享的问题。 其他算法 总结Nginx 作为一款优秀的反向代理服务器,可以通过不同的负载均衡算法来解决请求量过大情况下的服务器资源分配问题。较为常见的负载均衡算法有轮询、加权轮询、IP 哈希等等,可分别应对不同的请求场景。如果有兴趣可以去 Github 理解下大神的源码,有问题也欢迎一起来探讨~ 参考连接 阿里巴巴淘系技术又拍云前端开发-Me |
CopyRight 2018-2019 实验室设备网 版权所有 |